package br.com.studyLife.controller;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
import br.com.studyLife.dao.UsuarioDao;
import br.com.studyLife.interceptor.Publico;
import br.com.studyLife.modelo.Usuario;
import br.com.studyLife.modelo.UsuarioWeb;
import br.com.caelum.vraptor.view.Results;

@Resource
public class HomeController {

	private final UsuarioDao dao;
	private final Validator validator;
	private final Result result;
	private final UsuarioWeb usuarioWeb;
	
	public HomeController(UsuarioDao dao,
							Validator validator,
							Result result,
							UsuarioWeb usuarioWeb) {
		this.dao = dao;
		this.validator = validator;
		this.result = result;
		this.usuarioWeb = usuarioWeb;
	}
	
	@Publico
	@Get @Path("/")
	public void index() {
	}
	
	@Publico
	@Post @Path("/doLogin")
	public void login(Usuario usuario) {
		Usuario carregado = dao.carrega(usuario);
		String retorno = "false";
		if (carregado != null) {
			retorno="true";
			usuarioWeb.login(carregado);
		}
		result.use(Results.json()).from(retorno).serialize();
	}
	@Publico
	@Get @Path("/doLogout")
	public void logout() {
		usuarioWeb.logout();
		result.redirectTo(this).index();
	}
	@Publico
	@Get @Path("/usuario/novo")
	public void novo() {
	}
	@Publico
	@Post @Path("/usuario/novo")
	public void adiciona(Usuario usuario) {
		if (dao.existeUsuario(usuario)) {
			validator.add(new ValidationMessage("Login j� existe!", "usuario.login"));
		}
		validator.onErrorUsePageOf(this).novo();
		
		dao.adiciona(usuario);
		result.redirectTo(this).index();
	}
}